﻿#ifndef Public_H
#define Public_H
/********************************************************************************
** @ Date:2025/10/15
** @ Author: HanJiaXin
** @ Description:公共头文件
** @ Version:1.0.0
** @ ClassName:
** @ Fun:
********************************************************************************/
#include <QObject>
#include <QMutex>
#include <QVector>
#include <QColor>
#include <QMap>
#include <QDomElement>
#include <QSharedPointer>
#include <QFile>

// 日志等级配置结构体
struct SLogLevelConfig
{
	int id;
	QString desc;
	QColor textColor;
	QColor backColor;
	QString iconPath;

	SLogLevelConfig()
		: id(0)
	{}
};

// 日志数据结构
struct LogData
{
	int nLevel;
	QString sLevel;
	QString sTime;
	QString sModuleName;
	QString sDeviceName;
	QString sFuncName;
	QString sLogContent;
	LogData()
	{
		nLevel = 0;
		sLevel = "";
		sTime = "";
		sModuleName = "";
		sDeviceName = "";
		sFuncName = "";
		sLogContent = "";
	}
	LogData(const int& nLv, const QString& sLv, const QString& time, const QString& module,
		const QString& device, const QString& func, const QString& log)
		: nLevel(nLv), sLevel(sLv), sTime(time), sModuleName(module), sDeviceName(device), sFuncName(func), sLogContent(log)
	{}
};

// 从日志文件读取最近的历史日志
extern QVector<QSharedPointer<LogData>> getRecentHistoryLogs(const QString& moduleName,const QString& deviceName,int maxCount = 50);

// 获取最近几天的日志文件
extern QVector<QString> getRecentLogFiles(const QString& moduleName,const QString& deviceName,int days = 3);

// 从单个文件读取最近的日志
extern QVector<QSharedPointer<LogData>> readRecentLogsFromFile(const QString& filePath,const QString& moduleName,const QString& deviceName,int maxCount);

// 解析单行日志
extern QSharedPointer<LogData> parseLogLine(const QString& line,const QString& moduleName,const QString& deviceName);

// 从文件末尾开始读取（针对大文件优化）
extern QVector<QSharedPointer<LogData>> readFromFileEnd(QFile& file, const QString& filePath, const QString& moduleName, const QString& deviceName, int maxCount);

// 读取整个文件（针对小文件）
extern QVector<QSharedPointer<LogData>> readEntireFile(QFile& file,const QString& filePath,const QString& moduleName,const QString& deviceName,int maxCount);

//根据等级描述返回日志等级
extern int getLevelFromString(const QString& levelStr);

#endif